Users of computers are demanding increased reliability and performance of their applications running on their computers. One bottleneck in a computer system is the rate at which hardware devices operate, including the rate at which an application program can store its data to them.
Alternatively, an application program could store its data in the random access memory (RAM) of the computer which typically provides access at a rate several orders of magnitude faster than that of a data file on a hard disk drive. However, RAM does not provide the data persistence and reliability of hardware devices in the advent of computer or application problems. Should an application or the computer crash, this data store in RAM is typically lost which is unacceptable to many applications. Thus, computer users and developers are desirous of more efficient and faster methods for storing their information to these hardware devices.
In attempting to provide both faster access and data persistence and reliability, memory-mapped files have been developed. Memory-mapped files provide a way for an application program to access data at rates approximating accessing RAM, while providing reliability as the data is also stored on a file on a hardware device (usually a hard disk drive). Memory-mapped files accomplish this by maintaining a file and its mirror image in RAM and on a hardware device. Once a file has been mapped by an application program into its virtual address space, the application can access it using memory pointers. Any modifications to the data in memory are updated to the hardware device using the operating system paging and caching mechanisms. Current techniques are inefficient, and users are desirous of increased speed and data integrity of these techniques.
Traditional data paging and caching methods operate by updating entire pages of memory when a single data element within the page has been modified (i.e., the page has become "dirty"). For example, Windows NT uses a lazy method of flushing the memory to the disk and writes entire pages at a time, rather than only the individually changed elements.
In other computing applications that update individual elements within a random access file, the storage of the data items to disk operates in a linear fashion. In this approach, a first data element is updated on disk, then a second data element, and so on. While this approach is simplistic, this method does not optimize the writing of these data elements to disk. In fact, the processing overhead is so high that the linear data writing approach does not allow data to be written at the fastest rate allowed by the hardware. Rather, the data logging rate is limited by software processing of individual write operations. A solution is needed for writing and reading of a large amount of data elements at random locations on a hardware device or within a file on a hardware device at high rates of speed which approach the physical limitations of the hardware device to which the data is being stored.